package com.example.bms.mapper;
import com.example.bms.entity.Admin;
import org.apache.ibatis.annotations.*;
import java.util.List;

/**
 * @apiNote 用于实现超级管理员的增删改查
 * @author 牛煜翔
 * @email 2837136899@qq.com
 * @since 1.0.0
 */
@Mapper
public interface AdminMapper {


    /**
     * @apiNote 查询所有管理员的基本信息
     * @author 牛煜翔
     * - adminName: 管理员姓名
     * - sex: 性别
     * - tel: 联系电话
     * - email: 电子邮箱
     * - cardId: 身份证号码
     * - role: 权限等级
     * @email 2837136899@qq.com
     * @return List<Admin>
     * @since 1.0.0
     */
    @Select("select adminName,sex,tel,email,cardId,role from admin")
    public List<Admin> findAll();


    /**
     * @apiNote  根据超级管理员id查询管理员的基本信息
     * @author 牛煜翔
     * - adminName: 管理员姓名
     * - sex: 性别
     * - tel: 联系电话
     * - email: 电子邮箱
     * - cardId: 身份证号码
     * - role: 权限等级
     * - adminId：管理员id
     * @param adminId 超级管理员id
     * @email 2837136899@qq.com
     * @return Admin
     * @since 1.0.0
     */
    @Select("select adminName,sex,tel,email,cardId,role from admin where adminId = #{adminId}")
    public Admin findById(Integer adminId);


    /**
     * @apiNote  根据超级管理员id删除管理员
     * @author 牛煜翔
     * - adminId：管理员id
     * @param adminId 超级管理员id
     * @return int类型，受影响的条数
     * @since 1.0.0
     */
    @Delete("delete from admin where adminId = #{adminId}")
    public int deleteById(int adminId);


    /**
     * @apiNote  根据超级管理员id修改管理员的基本信息
     * @author 牛煜翔
     * - adminName: 管理员姓名
     * - sex: 性别
     * - tel: 联系电话
     * - email: 电子邮箱
     * - cardId: 身份证号码
     * - role: 权限等级
     * - adminId：管理员id
     * @param admin 超级管理员对象
     * @email 2837136899@qq.com
     * @return int类型，受影响的条数
     * @since 1.0.0
     */
    @Update("update admin set adminName = #{adminName},sex = #{sex}," +
            "tel = #{tel}, email = #{email},pwd = #{pwd},cardId = #{cardId},role = #{role} where adminId = #{adminId}")
    public int update(Admin admin);


    /**
     * @apiNote  增加一个超级管理员
     * @author 牛煜翔
     * - adminName: 管理员姓名
     * - sex: 性别
     * - tel: 联系电话
     * - email: 电子邮箱
     * - pwd：密码
     * - cardId: 身份证号码
     * - role: 权限等级
     * - adminId：管理员id
     * @param admin 超级管理员对象
     * @email 2837136899@qq.com
     * @return int类型，增加成功返回1，失败返回0
     * @since 1.0.0
     */
    @Options(useGeneratedKeys = true,keyProperty = "adminId")
    @Insert("insert into admin(adminName,sex,tel,email,pwd,cardId,role) " +
            "values(#{adminName},#{sex},#{tel},#{email},#{pwd},#{cardId},#{role})")
    public int add(Admin admin);
}
